<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>async&await</title>
</head>
<body>

</body>
<script>
    /*
    * async ===> ES7 使异步操作变得更加方便
    * 是Generator和Promise的 语法糖
    *   async
    *   返回一个promise对象, 无论函数内部是否有await都会返回promise对象
    *   函数内部return返回的值, 会成为then回调函数的第一个参数
    *   函数内部如果出现错误,会背then放的第二个参数或catch所捕获
    *
    *   await
    *   只能在async函数中出现, 普通函数直接使用会报错
    *   正常情况下, await后面是一个Promise对象, 返回该对象的结果.
    *   如果await后面不是Promise对象, 就直接返回对应的值
    *
    * */

    {
        /*let p1 = () => new Promise((resolve, reject) => {
            resolve("hello");
        });

        function fn() {
            p1().then(
                res => {
                    console.log("demo1-1", res)
                }
            );
            console.log("demo1-2")
        }
        fn();*/
    }
    {
        /*let p1 = ()=>Promise.resolve("hello");
        async function fn() {
            //像是写同步代码一样
            let res = await p1();
            console.log("demo2-1", res);
            console.log("demo2-2")
        }
        fn();*/
    }
    {
        /*async function fn() {
            throw new Error("这是一个错误");
            return "你好"
        }
        fn().then(
            res=>{
                console.log("demo3-1---res",res);
            },
            err=>{
                console.log("demo3-1---err",err);
            }
        ).catch(catchErr=>{
            console.log("demo3-1---catchErr",catchErr);
        });*/
    }
    {
        /*let p1 = () => Promise.resolve("hello");

        async function fn() {
            //像是写同步代码一样
//            let res = await p1();//Promise对象
            let res = await 1;//Promise对象
            console.log("demo4-1", res);
        }

        fn();*/
    }
    {
        let p1 = () => Promise.resolve("hello");

        async function fn() {
            try {
                //像是写同步代码一样
                let res = await p1();//Promise对象
                console.log("demo5-1", res);
                throw new Error("新的报错")
            }catch (err){
                console.log("demo5-2",err)
            }
        }

        fn();
    }













</script>
</html>